package com.bjpowerrnode.javase.array;

import java.util.Arrays;
import java.util.List;

/*
1、数组工具类：自己写的，不是SUN的。
2、关于查找算法中的：二分法算法：但是二分法是基于已经排序的数组。
10(下标0) 11 12 13 14 15 16 17 18 19 20(下标10)
通过二分法查找，找出18这个元素的下表：
    (0 + 10)/2 -->中间元素的下表：5
 那着中间这个元素和目标元素进行对比：
    15 < 18(被查找元素)
    被查找元素18在中间元素d右边。

    所以开始元素的下表从0变成5+1

 在重新计算中间元素的小标(6+10)/2 = 8
 8下表元素对应的元素就是18：
 找到中间元素和目标元素正好相等，表示找到。
 */
public class ArrayUtil {
    public static void main(String[] args) {
        int[] array = {200,205,207,300,456,2345,14020};

        int index = binarySearch(array,14020);
        System.out.println(index == -1 ? "改元素不存在" : "该元素的下标：" + index);

        String[] strs = {"sxt1","sxt2","sxt3","sxt4"};
        List<String> strings = Arrays.asList(strs);
        boolean sxt1 = strings.contains("sxt1");
        System.out.println(sxt1);

        String persion = "1,2,3,4,5";
        String[] split = persion.split(",");
        for (String s : split) {
            System.out.println(s);
        }
    }

    /**
     * 从数组中查找目标元素的下标：
     * @param array 被查找的数组，该数组必须是排序过的
     * @param dest 目标元素
     * @return -1 表示该元素不存在，其它数字表示该元素的下标
     */
    public static int binarySearch(int[] array, int dest) {
        //开始下标
        int begin = 0;
        //结束下标
        int end = array.length - 1;
       while(begin <= end) {    //中间元素下标
            int mid = (begin + end) / 2;
            if (array[mid] == dest) {
                return mid;
            } else if (array[mid] < dest) {
                //目标在中间元素的右边
                begin = mid + 1;
            } else {
                //目标在中间元素达到左边
                end = mid - 1;
            }
        }
        return -1;
    }


}
